package com.bdbit.ChargingStation.wx.results;

import com.google.gson.annotations.SerializedName;
import lombok.Data;

/**
 * resource解密后字段
 */
@Data
public class NotifyResource {

    /**
     * 【公众账号ID】商户下单时传入的公众账号ID。
     */
    private String appid;

    /**
     * 【商户号】商户下单时传入的商户号。
     */
    private String mchid;

    /**
     * 【商户订单号】商户下单时传入的商户系统内部订单号。
     */
    @SerializedName("out_trade_no")
    private String outTradeNo;

    /**
     * 【微信支付订单号】 微信支付侧订单的唯一标识。
     */
    @SerializedName("transaction_id")
    private String transactionId;

    /**
     * 【交易类型】 返回当前订单的交易类型，枚举值：
     * <p>
     * JSAPI：公众号支付、小程序支付
     * <p>
     * NATIVE：Native支付
     * <p>
     * APP：APP支付
     * <p>
     * MICROPAY：付款码支付
     * <p>
     * MWEB：H5支付
     * <p>
     * FACEPAY：刷脸支付
     */
    @SerializedName("trade_type")
    private String tradeType;

    /**
     * 【交易状态】 交易状态，详细业务流转状态处理请参考开发指引-订单状态流转图。枚举值：
     * <p>
     * SUCCESS：支付成功
     * <p>
     * REFUND：转入退款
     * <p>
     * NOTPAY：未支付
     * <p>
     * CLOSED：已关闭
     * <p>
     * REVOKED：已撤销（仅付款码支付会返回）
     * <p>
     * USERPAYING：用户支付中（仅付款码支付会返回）
     * <p>
     * PAYERROR：支付失败（仅付款码支付会返回）
     */
    @SerializedName("trade_state")
    private String tradeState;

    /**
     * 【交易状态描述】 对交易状态的详细说明。
     */
    @SerializedName("trade_state_desc")
    private String tradeStateDesc;

    /**
     * 【银行类型】 用户支付方式说明，订单支付成功后返回，格式为：银行简码_具体类型(DEBIT借记卡/CREDIT信用卡/ECNY数字人民币)，例如ICBC_DEBIT代表工商银行借记卡，非银行卡支付类型(例如余额/零钱通等)统一为OTHERS，具体请参考《银行类型对照表》。
     */
    @SerializedName("bank_type")
    private String bankType;

    /**
     * 【商户数据包】商户下单时传入的自定义数据包，用户不可见，长度不超过128字符，若下单传入该参数，则订单支付成功后此接口和查询订单接口以及交易账单中会原样返回；若下单未传该参数，则不会返回。
     */
    private String attach;

    /**
     * 【支付完成时间】
     * <p>
     * 1、定义：用户完成订单支付的时间。
     * <p>
     * 2、格式：遵循rfc3339标准格式：yyyy-MM-DDTHH:mm:ss+TIMEZONE。yyyy-MM-DD 表示年月日；T 字符用于分隔日期和时间部分；HH:mm:ss 表示具体的时分秒；TIMEZONE 表示时区（例如，+08:00 对应东八区时间，即北京时间）。
     * <p>
     * 示例：2015-05-20T13:29:35+08:00 表示北京时间2015年5月20日13点29分35秒。
     */
    @SerializedName("success_time")
    private String successTime;

    /**
     * 【支付者信息】 订单的支付者信息。
     */
    private Payer payer;

    /**
     * 【订单金额】 订单金额信息，当支付成功时返回该字段。
     */
    private Amount amount;

    @Data
    public static class Payer {
        /**
         * 【用户标识】用户在商户下单的appid下唯一标识。
         */
        private String openid;
    }

    @Data
    public static class Amount {
        /**
         * 【总金额】 订单总金额，单位为分，整型。
         */
        private int total;
        /**
         * 【用户支付金额】用户支付金额，整型，单位为分。（指使用优惠券的情况下，这里等于总金额-优惠券金额）
         */
        @SerializedName("payer_total")
        private int payerTotal;

        /**
         * 【货币类型】固定返回：CNY，代表人民币。
         */
        private String currency;

        /**
         * 【用户支付币种】 固定返回：CNY，代表人民币。
         */
        @SerializedName("payer_currency")
        private String payerCurrency;
    }
}
